package persistentie;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import domein.Klant;

public class KlantMapper extends Mapper
{
/*Attributen*/
	private final static String SELECTEER_KLANTEN = "SELECT * FROM klanten ORDER BY klantId";
    private final static String TOEVOEGEN_KLANT = "INSERT INTO klanten (klantVoornaam,klantAchternaam,adres,postcode,plaats,geslacht,geboortedatum,rijbewijs) VALUES(?,?,?,?,?,?,?,?)";
	private final static String UPDATE_KLANT = "UPDATE klanten SET klantVoornaam = ?, klantAchternaam = ?, adres = ?, postcode = ?, plaats = ?, geslacht = ?, geboortedatum = ?, rijbewijs = ? WHERE klantId = ?";
	private final static String VERWIJDER_KLANT = "DELETE FROM klanten WHERE klantId=?";
	private final static String LAATST_INGEVOERDE_KLANT = "SELECT klantId FROM klanten ORDER BY klantId DESC";
													    //"SELECT klanten.klantId FROM klanten ORDER BY klantId DESC LIMIT 1"
/*Methodes*/
	public List<Klant> geefKlanten()
	{
		List<Klant> klantenLijst = new ArrayList<Klant>();
		verbinding = PersistentieController.getInstance().getVerbinding();

		try
		{
			statement = verbinding.createStatement();
			resultaat = statement.executeQuery(SELECTEER_KLANTEN);
			
			while (resultaat.next())
			{
				int klantId = resultaat.getInt("klantId");
				String klantVoornaam = resultaat.getString("klantVoornaam");
				String klantAchternaam = resultaat.getString("klantAchternaam");
				String adres = resultaat.getString("adres");
				int postcode = resultaat.getInt("postcode");
				String plaats = resultaat.getString("plaats");
				boolean geslacht = resultaat.getBoolean("geslacht");
				int geboortedatum = resultaat.getInt("geboortedatum");
				String rijbewijs = resultaat.getString("rijbewijs");

				Klant klant = new Klant(klantId,klantVoornaam, klantAchternaam, adres,
						postcode, plaats, geslacht, geboortedatum, rijbewijs);
				klantenLijst.add(klant);
			}
			return klantenLijst;
		} 
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				this.closeStatement();
				this.closeConnection();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return null;
	}
	public void voegKlantToe(Klant klant)
	{
		verbinding = PersistentieController.getInstance().getVerbinding();
		initQuery(TOEVOEGEN_KLANT);
		
		try {
			pStatement.setString(1, klant.getKlantVoornaam());
			pStatement.setString(2, klant.getKlantAchternaam());
			pStatement.setString(3, klant.getAdres());
			pStatement.setInt(4,klant.getPostcode());
			pStatement.setString(5, klant.getPlaats());
			pStatement.setBoolean(6, klant.isGeslacht());
			pStatement.setInt(7, klant.getGeboortedatum());
			pStatement.setString(8, klant.getRijbewijs());
			pStatement.executeUpdate();
			
		/*Ophalen laatste id >> nog niet optimaal*/			
			klant.setKlantId(this.haalLaatstIngevoegdId(LAATST_INGEVOERDE_KLANT));
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				this.closePreparedStatement();
				this.closeConnection();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	public void wijzigKlant(Klant klant)
	{
		verbinding = PersistentieController.getInstance().getVerbinding();
		initQuery(UPDATE_KLANT);

		try {
			pStatement.setString(1, klant.getKlantVoornaam());
			pStatement.setString(2, klant.getKlantAchternaam());
			pStatement.setString(3, klant.getAdres());
			pStatement.setInt(4,klant.getPostcode());
			pStatement.setString(5, klant.getPlaats());
			pStatement.setBoolean(6, klant.isGeslacht());
			pStatement.setInt(7, klant.getGeboortedatum());
			pStatement.setString(8, klant.getRijbewijs());
			pStatement.setInt(9, klant.getKlantId());
			pStatement.executeUpdate();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				this.closePreparedStatement();
				this.closeConnection();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	public void verwijderKlant(Klant klant)
	{
		verbinding = PersistentieController.getInstance().getVerbinding();
		initQuery(VERWIJDER_KLANT);
		
		try 
		{
			pStatement.setInt(1, klant.getKlantId());
			pStatement.executeUpdate();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				this.closePreparedStatement();
				this.closeConnection();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}